class Watcher {
  //第一个是Vue实例   第二个是值的key  第三个是回调函数
  constructor(vm, key, cb) {
    this.vm = vm
    //data中的属性名称
    this.key = key
    //回调函数负责跟新视图
    this.cb = cb

    //把watcher对象记录到Dep类的静态属性target
    Dep.target = this
    //触发get方法,在get方法中调用addSub(访问这个属性就会触发abserver)
    this.oldValue = vm[key]
    //设置为空是防止后续重复添加
    Dep.target = null
  }
  // 当数据发送变化的时候跟新视图
  update() {
    let newValue = this.vm[this.key]
    if (this.oldValue === newValue) {
      return
    }
    //不相等就更新
    this.cb(newValue)
  }
}
